package com.classs05.b_object;

public class Person implements Cloneable {
    private String name;
    private String age;

    public Person() {
    }

    public Person(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
//
    /*
       问题1:obj直接调用name和age调用不了，因为Object接收了Person类型的对象
            属于多态，多态前提下不能直接调用子类特有内容
       解决问题1:向下转型

       问题2:如果传递的不是Person类型，就会出现类型转换异常
       解决问题2:先判断类型，如果是Person类型，再强转成Person

       问题3:如果传递null呢？,就不用判断类型了，直接给false
       解决问题3:在equals方法中已经处理了null的情况

       问题4:如果传递自己呢？就不用判断非空了，也不用判断类型了，直接给true
       解决问题4:在equals方法中已经处理了自身比较的情况
     */
//    public  boolean equals(Object obj) {
//        if (this == obj) {
//            return true;
//        }
//        if (obj == null) {
//            return false;
//        }
//        if (obj instanceof Person) {
//            Person p = (Person) obj;
//            return this.name.equals(p.name) && this.age.equals(p.age);
//        }
//        return false;
//    }


    public boolean equals(Object obj) {
        if (this == obj) return true; //判断当前对象是否与参数对象相同,如果是直接返回true
//        getClass()返回当前对象的类   obj.getClass()返回传入对象的类
        System.out.println(getClass() + " " + obj.getClass());
//        false || true // false
        if (obj == null || getClass() != obj.getClass()) return false; //判断参数对象是否为空,并且判断参数对象与当前对象是否属于同一个类
        Person person = (Person) obj;//向下转型,强转成Person类型
        return this.age == person.age && this.name.equals(person.name);
    }

    public Object clone() throws CloneNotSupportedException {
        return super.clone(); //调用父类方法克隆当前对象
    }


}
